package com.ht.api.callback.impl.official;

import java.util.ArrayList;
import java.util.List;

import javax.sql.DataSource;

import com.ht.api.callback.impl.BaseCallbackFunction;
import com.ht.api.open.OpenUtil;
import com.ht.api.service.ExternalContactService;

import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;

/**
 * 微信公众号：关注/取消关注事件
 * @author asq
 * @createTime 2025年4月10日 19:57:40
 */
public class SubscribeCallbackFunction extends BaseCallbackFunction {
	/** 接口:获取用户基本信息 */
	private static final long API_ID_USER_INFO = 1909548820774129664L;

	@Override
	protected List<String> buildSourceDataList(JSONObject params) {
		DataSource ds = getTenantDs(appid);
		List<String> list = new ArrayList<>();

		// 扫描带场景值的二维码时，更新接粉相关数据
		String state = params.getStr("EventKey");
		if (StrUtil.isNotBlank(state)) {
			state = state.replaceFirst("qrscene_", "");

			ExternalContactService.updateInCntByPosition(ds, state, params.getStr("CreateTime"));
		}
		
		// 如果是关注事件，再查询用户详情
		if ("subscribe".equals(params.getStr("Event"))) {
			String openid = params.getStr("FromUserName");
			String strInfo = OpenUtil.call(appid, API_ID_USER_INFO, JSONUtil.createObj().set("openid", openid));
			list.add(strInfo);
		}

		// 保存关注/取消关注事件
		list.add(params.toString());

		return list;
	}


}
